#ifndef GENOSAGEBASEWIDGET_H
#define GENOSAGEBASEWIDGET_H

#include <QObject>
#include <QGraphicsItem>
#include "../../VisBaseClasses/visbasewidget.h"

//Forward declarations to avoid circular dependencies
class GenoSage;
class SageVis;

/**GenoSageBaseWidget class.
  * GenoSageBaseWidget will serve as the base class for all visualization widgets in GenoSage.
  * It inherits from VisBaseWidget.
  * As with VisBaseWidget, I intend for all classes that inherit from GenoSageBaseWidget to be full visualizations applications.
  * This means that objects contain data, elements for display and accepts events to drive changes in data presentation.
  * I wavered on whether to create this class or not. I decided to create it so that I would have the opportunity to isolate
  * general vis widget features from genosage widget features.  I think this might be useful for operations on data and might come in handy for particular
  * connection types between genosage visualizations.
  * This is the theory.  We'll see how it plays out in practice.
*/
class GenoSageBaseWidget : public VisBaseWidget
{
    Q_OBJECT
public:
    /** GenoSageBaseWidget constructor.
      * Constructor requires genoSagePointer, sageVisPointer and QGraphicsItem parent.
      * The parent will generally be sageVis, but in some cases genoSage widgets may be embedded on other widgets.
      */
    GenoSageBaseWidget(QPointer<GenoSage> genoSagePointer, QPointer<SageVis> sageVisPointer, QGraphicsItem *parent);
    
signals:
    
public slots:

private:
    QPointer< GenoSage > genoSagePointer;/**< Pointer to genoSage parent.*/

};

#endif // GENOSAGEBASEWIDGET_H
